package com.vtech.ont.base;

import lombok.extern.slf4j.Slf4j;
import org.apache.jena.rdf.model.Resource;
import org.apache.jena.vocabulary.OWL2;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

/**
 * OWL类型判断
 * TODO 功能应用及验证
 * @author houzhiwei
 * @date 2017 /6/29 17:42
 */
@Slf4j
public class OwlType {
    private final static List<String> fieldsList = new ArrayList<String>();

    static {
        Field[] fields = OWL2.class.getFields();

        for (Field field : fields) {
            fieldsList.add(field.getName());
        }
    }

    /**
     * 判断是否是owl2里面的resource或property<br>
     * 如果是则不加入表，不进行可是化显示
     *
     * @param res the Resource
     * @return boolean
     */
    public boolean isOWL2Type(Resource res)
    {
        return fieldsList.contains(res.getLocalName()) ? true : false;
    }

    /**
     * Is owl 2 type.
     *
     * @param res the Resource
     * @return the boolean
     */
    public boolean isOWL2Type(String res)
    {
        return fieldsList.contains(res) ? true : false;
    }

    /**
     * 是否是类
     *
     * @param res the Resource
     * @return the boolean
     */
    public boolean isOWL2Class(Resource res)
    {
        return OWL2.Class.equals(res) ? true : false;
    }

    /**
     * 是否是类
     *
     * @param res the Resource
     * @return the boolean
     */
    public boolean isOWL2Class(String res)
    {
        return OWL2.Class.getLocalName().equals(res) ? true : false;
    }

    /**
     * 是否实例
     *
     * @param res the Resource
     * @return boolean
     */
    public boolean isOWL2NamedIndividual(Resource res)
    {
        return OWL2.NamedIndividual.equals(res) ? true : false;
    }

    /**
     * 是否实例
     *
     * @param resUri the Resource uri
     * @return boolean
     */
    public boolean isOWL2NamedIndividual(String resUri)
    {
        return OWL2.NamedIndividual.getLocalName().equals(resUri) ? true : false;
    }

    /**
     * 是否本体：顶级类
     *
     * @param res the Resource
     * @return boolean
     */
    public boolean isOWL2Ontology(Resource res)
    {
        return OWL2.Ontology.equals(res) ? true : false;
    }

    /**
     * 是否本体：顶级类
     *
     * @param resUri the Resource
     * @return boolean
     */
    public boolean isOWL2Ontology(String resUri)
    {
        return OWL2.Ontology.getLocalName().equals(resUri) ? true : false;
    }

}
